﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Prototipo.Models;
using Prototipo.Filters;
using Prototipo.Helpers;
using System.Data.SqlClient;

namespace Prototipo.Controllers
{
    public partial class HomeController : Controller
    {
        private Entidades db = new Entidades();

        [ComprobarLecturaQR]
        public virtual ActionResult Index()
        {
            ViewBag.NombreLocal = db.LOCAL.Find(this.ID_Local_Session()).CADENA_DE_LOCALES.NOMBRE_CADENA_LOCALES;
            return View();
        }

        public virtual ActionResult Comprobar(int id /*Local*/, int mesa, string sid = "")
        {
            /* COMPROBACIONES */
            if (!db.LOCAL.Any(l => l.ID_LOCAL == id) /*|| validar MESAS*/)
            {
                //DO SOMETHING
            }
            /* -------------- */

            Session["Local"] = id;
            Session["Mesa"] = mesa;

            string id_sesion = Session.SessionID;

            if (!db.ATENCION_MESA.Any(a => a.ID_ATENCION.Equals(id_sesion)))
            {
                ATENCION_MESA atencion = new ATENCION_MESA
                {
                    ID_ATENCION = id_sesion,
                    NUMERO_MESA = mesa,
                    INICIO_ATENCION = DateTime.Now
                };
                db.ATENCION_MESA.Add(atencion);

                db.SaveChanges();
            }

            return RedirectToAction(Actions.Index());
        }

        [ChildActionOnly]
        [ComprobarLecturaQR]
        public virtual ActionResult DatosMesa()
        {
            DatosMesaModel datos = new DatosMesaModel();

            try
            {
                datos.Id_Mesa = this.ID_Mesa_Session();

                ATENCION_MESA atencion = db.ATENCION_MESA.Find(Session.SessionID);
                datos.Total_pedido = atencion != null ? atencion.COMANDA.Where(c => !c.ENVIADA).Sum(c => c.DETALLE_COMANDA.Sum(d => d.CANTIDAD * d.PRODUCTO_INDIVIDUALIZADO.PRECIO)) : 0;
                datos.DatosOK = true;
            }
            catch (FaltaVariableSessionException)
            {
                datos.DatosOK = false;
            }

            return PartialView(datos);
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}
